{
  //默认参数，注意：默认值变量后面不能有非默认值变量
  function test (x, y='hello') {
    console.log(x,y);
  }
  test();
  test('word');
  test('12','23');
}

{
  //作用域
  let x = 'hello';
  
  function test () {
    console.log(x);
  }
  
  test();

  function test2 (x,y=x) {
    console.log(x,y);
  }

  test2(x);
}

{
  // rest参数，即... ，在不确定参数的个数时，会把所有参数转成一个数组
  function arg (...rest) {
    for (let key of rest) {
      console.log(key);
    }
  }
  arg(1,2,3,45,5);
}

{
  console.log(...[1,2,3]);  
  console.log('a',...[1,2,3,4]);
}

{
  // 箭头函数
  let arrow = v => v*2; // 一个参数，则直接参数名称，多个参数要用()
  let arrow2 = () => 5; //如果没有参数，则写()
  console.log('arrow',arrow(3));  // arrow 6
  console.log(arrow2()); // 5
}

{
  // 尾调用,就是指某个函数的最后一步是调用另一个函数。尾调用不一定出现在函数尾部，
  // 只要是最后一步操作即可。注意：只能是最后一步，只能是return tail(x)
  function tail (x) {
    console.log('hello',x);
  }
  function fx (x) {
    return tail(x);
  }

  fx('world');
}